
#include "odn_util_Vector3D.h"

class ODN_Point
{
	
public:
	
	//TODO: Look into making into inline 
	virtual bool Update()		{}
	
	virtual void shiftPos(Vector3D Offset)		{ pos += Offset; }
	
private:
	
	Vector3D pos; 
	
};

//TOTO: Think about using StaticPoint : public Point and Point as abstract class 

class ODN_DynamicPoint : public ODN_Point
{
	
public:
	
	virtual bool Update()
	{
		
		//Integrate position variable 
		
	}
	
	virtual void shiftPos(Vector3D Offset) 		{ pos += Offset; oldpos += Offset; } 
	
private:
	
	Vector3D oldpos, force;
	float mass;
	
};

class ODN_Collider
{
	
public:
	
	
	
private:
	
	
	
};

class ODN_CircleCollider : public ODN_Collider
{
	
public:
	
	
	
private:
	
	ODN_Point* point;
	float radius;
	
};

class ODN_PhysicsModel : public ODN_SceneObject
{
	
public:
	
	virtual bool Update()
	{
		
		//Update all points 
		for (int i=0;i<points.size();i++) {
			points[i]->Update();
		}
		
		//Update all bones
		for (int i=0;i<bones.size();i++) {
			bones[i]->Update();
		}
		
	}
	
	//TODO: Work out a way to allow objects to be moved to a position 
	virtual void moveTo(Vector3D Pos)		{}
	
private:
	
	std::vector<ODN_StaticPoint*> points;
	
	std::vector<ODN_Bone*> bones;
	
	std::vector<ODN_Collider*> colliders;
	
};
